class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @param target int整型 
     * @return int整型
     */
    /*
    找到两个有序数组的边界，
    拿目标值和最左边的比较，如果大于，说明在第一个有序数组中
    小于则在第二个有序数组中
    然后进行一个常规的二分查找
    */
    int search(vector<int>& nums, int target) {
        // write code here
        //1、找分界点
        int low=0;
        int high=nums.size()-1;
        while(low<high)
        {
            int mid=(low+high+1)>>1;
            if(nums[0]<=nums[mid])
                low=mid;
            else
                high=mid-1;
        }
        //low和higt指向第一个有序数组的边界
        //如果目标值比第一个数组第一个元素大，说明目标元素应该在一个有序数组范围内
        //否则就在第二个有序数组中
        if(target>=nums[0])
        {
            low=0;
        }else{
            low=high+1;
            high=nums.size()-1;
        }
        //在一个有序数组中进行二分查找
         while (low < high){
            int mid = low + high >> 1;
            if (nums[mid] >= target) high = mid;
            else low = mid + 1;
        }

        return nums[high] == target ? high : -1;
    }
};